#ifndef __IIC_HARDWARE_H__
#define __IIC_HARDWARE_H__

// #define USE_HARDWARE_IIC   // 使用硬件IIC（注：软件IIC和硬件IIC只能同时使用一种）

#ifdef USE_HARDWARE_IIC
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_i2c.h"
#include "stm32f10x_dma.h"
#include "misc.h"

// IIC 端口配置
#define IIC_PORT              I2C1
#define IIC_PORT_CLOCK        RCC_APB1Periph_I2C1
#define I2C_SPEED             400000             // IIC速率
#define I2C_SLAVE_ADDRESS7    0xA0               // IIC本机地址（无用）
#define IIC_LONG_TIMEOUT      10 * 0x1000        // IIC通讯超时时间

// IIC SCL引脚配置
#define IIC_SCL_CLOCK    RCC_APB2Periph_GPIOB     // 时钟
#define IIC_SCL_PORT     GPIOB                    // 端口
#define IIC_SCL_PIN      GPIO_Pin_6               // 引脚号

// IIC SDA引脚配置
#define IIC_SDA_CLOCK    RCC_APB2Periph_GPIOB     // 时钟
#define IIC_SDA_PORT     GPIOB                    // 端口
#define IIC_SDA_PIN      GPIO_Pin_7               // 引脚号

// IIC DMA设置
#define I2C_DMA                      DMA1   
// #define I2C_DMA_FLAG_TX_TC           DMA1_IT_TC6   
// #define I2C_DMA_FLAG_TX_GL           DMA1_IT_GL6 
// #define I2C_DMA_CHANNEL_TX           DMA1_Channel6
// #define I2C_DMA_TX_IRQn              DMA1_Channel6_IRQn
#define I2C_DMA_FLAG_RX_TC           DMA1_IT_TC7 
#define I2C_DMA_FLAG_RX_GL           DMA1_IT_GL7    
#define I2C_DMA_CHANNEL_RX           DMA1_Channel7 
#define I2C_DMA_RX_IRQn              DMA1_Channel7_IRQn 
#define I2C_DMA_CLK                  RCC_AHBPeriph_DMA1
#define I2C_DR_Address               ((uint32_t)0x40005410)
#define I2C_DMA_PREPRIO              0     // DMA中断优先级
#define I2C_DMA_SUBPRIO              0   

void iic_init(void);
uint8_t iic_write_bytes(uint8_t addr, uint8_t *buf, uint8_t buf_size);
uint8_t iic_receive_bytes(uint8_t addr, uint8_t *buf, uint8_t buf_size);
#endif
#endif
